let fs = require('fs');
const path = require('path');
const resolve = (filename) => {
  return path.resolve(__dirname, filename);
};
const ReadStream = require('./ReadStream2');

// let rs = new ReadStream(resolve('a.txt'),{
let rs = fs.createReadStream(resolve('b.txt'),{
  flags:'r'
  , autoClose:true
  , encoding: 'utf8'
  , start:0 //开始位置
  , end:6 //结束位置 包前又包后
  , highWaterMark: 3
});

//默认只要on readable就会往缓存区里先读取highWaterMark这么多个字节

/*rs.on('readable', function () {
  let result = rs.read(); //默认没有参数的话，会把缓存区里的都读出来
  console.log(result)
  /!*<Buffer 31 32 33>
  <Buffer 34 35 36>
  <Buffer 37>
  null*!/
});*/

/*
node10+貌似createReadStream的readable事件不再会暂停
而是会直接读取完毕

*/
/*rs.on('readable',  ()=> {
  console.log(rs.read(2));
});*/

/*rs.on('readable',  ()=> {
  let result = rs.read(1);
  // console.log(rs._readableState.length);
  console.log(rs.length); //2
  console.log('result:',result); //result: <Buffer 31>
  result = rs.read(1);
  console.log('result:',result); //result: <Buffer 32>
  setTimeout(()=>{
    // console.log(rs._readableState.length);
    console.log(rs.length); //4
  },1000)

  /!*
    在回调中多次调用rs.read
    只会续杯一次
  *!/
});*/

/*rs.on('end',()=>{
  console.log('end')
})*/

rs.on('readable', () => {
  let result = rs.read(5); //如果n超过了highWaterMark 会直接续杯并改变highWaterMark
  console.log('result:', result);
});





/*
当到达流数据的尽头时， 'readable' 事件也会触发，但是在 'end' 事件之前触发。

'readable' 事件表明流有新的动态：要么有新的数据，要么到达流的尽头。
对于前者，stream.read() 会返回可用的数据。
对于后者，stream.read() 会返回 null。(比如说读取一个空文件)
*/


